package com.codegen.enums;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonFormat.Shape;

import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

/**
 * @author LZCXTECH06
 * @date 2019年9月9日
 */
@JsonFormat(shape = Shape.OBJECT)
@Getter
public enum ValidateType {

    /**
     * 字符串（可见的）
     */
    STRING("字符串",false,true,null),
    /**
     * 数值
     */
    NUMBER("数值", true, false, null),

    /**
     * 域名
     */
    DOMAIN_NAME("域名", false, true, "[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?"),
    /**
     * 链接
     */
    URL("链接", false, true, "^(http(s)?://)?([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]\\*)?$"),

    /**
     * IP地址
     */
    IP("IP地址", false, true, "((?:(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d?\\\\d)\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d?\\\\d))"),

    /**
     * 邮箱
     */
    EMAIL("邮箱",false,true,"^\\w+([-+.]\\w+)\\*@\\w+([-.]\\w+)\\*\\.\\w+([-.]\\w+)\\*$"),

    /**
     * 手机号
     */
    PHONE("手机号",false,true,"^(1[3-9]\\d{9}$"),

    /**
     * 整数
     */
    INTEGER("整数",true,false,null),

    /**
     * 身份证号
     */
    IDENTITY("身份证号",false,true,"^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$"),

    /**
     * 日期时间
     */
    DATETIME("日期时间",false,false,null),

    /**
     * 日期
     */
    DATE("日期",false,false,null),

    /**
     * 时间
     */
    TIME("时间",false,false,null),

    /**
     * 密码:以字母开头，长度在6~18之间，只能包含字母、数字和下划线
     */
    PASSWORD("密码",false,true,"^[a-zA-Z]\\w{5,17}$"),

    /**
     * 汉字
     */
    CHINESE_CHAR("汉字",false,true,"^[\\u4e00-\\u9fa5]{0,}$");

    ValidateType(String desc, boolean valueable, boolean lengthable, String regExp) {
        this.desc = desc;
        this.valueable = valueable;
        this.lengthable = lengthable;
        this.regExp = regExp;
    }

    private String desc;
    private boolean valueable;
    private boolean lengthable;
    private String regExp;


    public String getName() {
        return name();
    }

    /**
     * Java 正则表达式转成Js表达式
     *
     * @return
     */
    public String getJsRegExp() {
        return StringUtils.isBlank(regExp) ? null : "/" + regExp + "/gi";
    }
}
